Server computers often include one or more input/output (I/O) devices. For instance, a server computer may include one or more network interface controllers (NICs) and/or storage area network (SAN) adapters. Each I/O device may communicate over multiple, possibly asynchronous interfaces, such as PCI Express and Ethernet. For example, a processor may send packets over a PCI Express bus to a NIC, and the NIC may receive packets over an Ethernet cable for processing by the server.
However, in many cases, multiple I/O devices may share the same interface (e.g., a PCI Express bus). Furthermore, a single physical I/O device may present itself as multiple virtual devices (e.g., virtual functions), each of which may be accessed by multiple virtual machines running on a server. These factors can complicate the logging of data relating to the I/O devices.